﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WCFOrganizacionREST.Dominio;
using System.Data.SqlClient;

namespace WCFOrganizacionREST.Persistencia
{
    public class GRUnidadOrganizacionalDAO
    {        
        
        public GRUnidadOrganizacional Crear(GRUnidadOrganizacional UnidadOrganizacionalACrear)
        {
            GRUnidadOrganizacional UnidadOrganizacionalCreado = null;
            string sql = "INSERT INTO GRUnidadOrganizacional VALUES (@iCodUOr, @vNomUOr, @iCodUsu, @vNomTer,@dtFecAct)";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@iCodUOr", UnidadOrganizacionalACrear.iCodUOr));
                    com.Parameters.Add(new SqlParameter("@vNomUOr", UnidadOrganizacionalACrear.vNomUOr));
                    com.Parameters.Add(new SqlParameter("@iCodUsu", UnidadOrganizacionalACrear.iCodUsu));
                    com.Parameters.Add(new SqlParameter("@vNomTer", UnidadOrganizacionalACrear.vNomTer));
                    com.Parameters.Add(new SqlParameter("@dtFecAct",DateTime.Now));
                    com.ExecuteNonQuery();
                }
            }
            UnidadOrganizacionalCreado = Obtener(UnidadOrganizacionalACrear.iCodUOr);
            return UnidadOrganizacionalCreado;
        }
        
        public GRUnidadOrganizacional Obtener(int iCodUOr)
        {
            GRUnidadOrganizacional UnidadOrganizacionalEncontrado = null;
            string sql = "SELECT * FROM GRUnidadOrganizacional WHERE iCodUOr=@iCodUOr";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@iCodUOr", iCodUOr));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            UnidadOrganizacionalEncontrado = new GRUnidadOrganizacional()
                            {                               
                                iCodUOr = (int)resultado["iCodUOr"],
                                vNomUOr = (string)resultado["vNomUOr"],
                                iCodUsu = (int)resultado["iCodUsu"],
                                vNomTer = (string)resultado["vNomTer"],
                                dtFecAct = (DateTime)resultado["dtFecAct"]                               
                            };
                        }
                    }
                }
            }
            return UnidadOrganizacionalEncontrado;
        }
        
        public GRUnidadOrganizacional Modificar(GRUnidadOrganizacional UnidadOrganizacionalAModificar)
        {
            GRUnidadOrganizacional UnidadOrganizacional = null;
            string sql = "UPDATE GRUnidadOrganizacional SET vNomUOr=@vNomUOr, iCodUOr=@iCodUOr,vNomTer=@vNomTer, dtFecAct=@dtFecAct WHERE iCodUOr=@iCodUOr";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@iCodUOr", UnidadOrganizacionalAModificar.iCodUOr));
                    com.Parameters.Add(new SqlParameter("@vNomUOr", UnidadOrganizacionalAModificar.vNomUOr));
                    com.Parameters.Add(new SqlParameter("@vNomTer", UnidadOrganizacionalAModificar.vNomTer));
                    com.Parameters.Add(new SqlParameter("@dtFecAct", DateTime.Now));
                    com.ExecuteNonQuery();
                }
            }
            UnidadOrganizacional = Obtener(UnidadOrganizacionalAModificar.iCodUOr);
            return UnidadOrganizacional;
        }
               
        public void Eliminar(GRUnidadOrganizacional UnidadOrganizacionalAEliminar)
        {
            string sql = "DELETE FROM GRUnidadOrganizacional WHERE iCodUOr=@iCodUOr";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@iCodUOr", UnidadOrganizacionalAEliminar.iCodUOr));
                    com.ExecuteNonQuery();
                }
            }
        }
        
        public List<GRUnidadOrganizacional> ListarTodos()
        {
            List<GRUnidadOrganizacional> UnidadOrganizacionalEncontrados = new List<GRUnidadOrganizacional>();
            GRUnidadOrganizacional UnidadOrganizacionalEncontrado = null;
            string sql = "SELECT * FROM GRUnidadOrganizacional";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            UnidadOrganizacionalEncontrado = new GRUnidadOrganizacional()
                            {
                                iCodUOr = (int)resultado["iCodUOr"],
                                vNomUOr = (string)resultado["vNomUOr"],
                                iCodUsu = (int)resultado["iCodUsu"],
                                vNomTer = (string)resultado["vNomTer"],
                                dtFecAct = (DateTime)resultado["dtFecAct"]
                            };
                            UnidadOrganizacionalEncontrados.Add(UnidadOrganizacionalEncontrado);                           
                        }
                    }
                }
            }
            return UnidadOrganizacionalEncontrados;
        }
        
        }
    }
